import { defineStore } from 'pinia'
import { userKey } from './keys'
import router from '@/router';
import { permission } from 'process';


// export const setUserInfo = defineStore(userKey, {
//     state: () => {
//         return {
//             userInfo: {
//                 token: ''
//             }
//         }
//     },
//     actions: {
//         setUserInfo(userInfo: { token: string }) {
//             this.userInfo = userInfo
//         },
//         clearUserInfo() {
//             this.userInfo = { token: '' }
//             localStorage.removeItem('token')
//         }
//     }
// });


//要求你的返回值约束
interface IUserState {
    menus: IMenuModel[];
    username: string;
    userInfo: {
                token: String;
            }
}

type menu = IMenuModel  &  {children?: IMenuModel[]}
//不要动 这里 这里涉及的token是登录用于存储token和返回获取菜单的
export const useUserStore = defineStore(userKey, {
    state(): IUserState {
        return {
            username: "",
            menus: [] ,
            userInfo: {
                token: ''
            }
        };
    },
    actions: {
        setUserInfo(userInfo: { token: string }) {
            this.userInfo = userInfo
        },
        clearUserInfo() {
            this.userInfo = { token: '' }
            localStorage.removeItem('token')
        }
    },
    //获取菜单数据  这里的menus是从后端获取到的
    getters:{
        routers(){
            //  一级菜单
            //处理pinal里面的菜单数据  就双层的数据结构
            let menus:menu[] = [];  //原有的数据 加上children 
            menus = this.menus
                .filter(item=> item.parentId === 0)
                .map(item=>({
                ...item,
                children: []
            }))
            console.log(menus)

            //把二级菜单加入 一级的children中  所有菜单都在pinal中
            this.menus.forEach((sub)=>{
                //找到menus1级里面的id和我的parentId一致的 就我的上级
                const p = menus.find((p)=>p.id === sub.parentId);   //在一级菜单找 id === parentId
                // 如果找到上级 加入到children
                if (p && sub.hidden === 0){   //"hidden":0 表示不隐藏 
                    p.children?.push(sub);  //如果存在上级 添加到children中
                }
            });

            return menus;
        },
        //菜单级别的权限控制  拿到用户的所有权限
        permissions():string[] {
            // let permissions: string[] = [];
            // this.menus.forEach((item)=>{
            //     if (item.permission) {
            //         permissions.push(item.permission)
            //     }
            // })
            //这里的name就是从后端获取到的菜单里面的name的值
            return this.menus.map((item) => item.name)  //返回所有的name;
        }    //然后

    }
    
});
